package com.retelimiter.controller;

import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.common.util.concurrent.RateLimiter;
import com.retelimiter.annotation.ExtRateLimiter;
import com.retelimiter.service.IndexService;

@Controller
public class IndexCotroller {
	@Autowired
	private IndexService indexService;
	
	RateLimiter  reteLimiter=RateLimiter.create(1.0);//创建令牌桶 1.0表示每秒向令牌桶中创建一个令牌
	/**
	 * 下单的请求
	 * @return
	 */
	@RequestMapping("/order")
	@ResponseBody
	public String order(){
		// 如果在500秒内 没有获取不到令牌的话，则会一直等待
		boolean acquire =reteLimiter.tryAcquire(500,TimeUnit.MILLISECONDS);
		if(!acquire){
			//表示没有拿到令牌
			System.out.println("没有拿到令牌，因为会一直等待的，你先放弃吧！");
			return "你在怎么抢，也抢不到，因为会一直等待的，你先放弃吧！";
		}
		String result=indexService.index();
		if (result!=null&&!"".equals(result)) {
			return "恭喜您,抢购成功!";
		}
		return "抢购失败!";
	}
	/**
	 * 自定义注解 限流请求
	 * @return
	 */
	@RequestMapping("/fingOrder")
	@ResponseBody
	@ExtRateLimiter(timeOut = 500, value = 1.0)
	public String fingOrder(){
		String result=indexService.index();
		return result;
	}
}
